//package com.kawaiior.asoulworld.blocks.tileEntity.compressor;
//
//import com.kawaiior.asoulworld.IdlFramework;
//import com.kawaiior.asoulworld.blocks.ModBlocks;
//import com.kawaiior.asoulworld.item.ModItems;
//import com.kawaiior.asoulworld.item.misc.ItemASSoulStoneType;
//import net.minecraft.item.Item;
//import net.minecraft.item.ItemStack;
//import net.minecraft.nbt.NBTTagCompound;
//import net.minecraft.tileentity.TileEntity;
//import net.minecraft.util.EnumFacing;
//import net.minecraft.util.ITickable;
//import net.minecraftforge.common.capabilities.Capability;
//import net.minecraftforge.items.CapabilityItemHandler;
//import net.minecraftforge.items.IItemHandler;
//import net.minecraftforge.items.ItemStackHandler;
//
//import javax.annotation.Nullable;
//
//public class TileEntitySoulRefiner extends TileEntity implements ITickable {
//
//    public static final String ID = IdlFramework.MODID + ":soul_refiner";
//    public int compressorProgress = 0;
//    public int soulPowerType = 0;
//    public int soulPower = 0;
//
//    public int getSoulPower() {
//        return soulPower;
//    }
//
//    public int getSoulPowerType() {
//        return soulPowerType;
//    }
//
//    public int soulPowerA = 0;
//    public int soulPowerB = 0;
//    public int soulPowerC = 0;
//    public int soulPowerD = 0;
//    public int soulPowerE = 0;
//
//    public int getCompressorProgress() {
//        return this.compressorProgress;
//    }
//
//    private final ItemStackHandler up = new ItemStackHandler(1){
//        @Override
//        protected void onContentsChanged(int slot){
//            TileEntitySoulRefiner.this.markDirty();
//        }
//    };
//
//    private final ItemStackHandler side = new ItemStackHandler(1){
//        @Override
//        protected void onContentsChanged(int slot){
//            TileEntitySoulRefiner.this.markDirty();
//        }
//    };
//
//    private final ItemStackHandler down = new ItemStackHandler(1){
//        @Override
//        protected void onContentsChanged(int slot){
//            TileEntitySoulRefiner.this.markDirty();
//        }
//    };
//
//    @Override
//    public void readFromNBT(NBTTagCompound compound){
//
//        this.soulPower = compound.getInteger("soulPower");
//
//        this.compressorProgress = compound.getInteger("Progress");
//        this.down.deserializeNBT(compound.getCompoundTag("Down"));
//        this.side.deserializeNBT(compound.getCompoundTag("Side"));
//        this.up.deserializeNBT(compound.getCompoundTag("Up"));
//        super.readFromNBT(compound);
//    }
//
//    @Override
//    public NBTTagCompound writeToNBT(NBTTagCompound compound){
//
//        compound.setInteger("soulPower", this.soulPower);
//
//        compound.setInteger("Progress", this.compressorProgress);
//        compound.setTag("Down", this.down.serializeNBT());
//        compound.setTag("Side", this.side.serializeNBT());
//        compound.setTag("Up", this.up.serializeNBT());
//        return super.writeToNBT(compound);
//    }
//
//    @Override
//    public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing){
//        Capability<IItemHandler> itemHandlerCapability = CapabilityItemHandler.ITEM_HANDLER_CAPABILITY;
//        return itemHandlerCapability.equals(capability) || super.hasCapability(capability, facing);
//    }
//
//    @Override
//    public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing){
//        Capability<IItemHandler> itemHandlerCapability = CapabilityItemHandler.ITEM_HANDLER_CAPABILITY;
//        if (itemHandlerCapability.equals(capability)){
//            if (EnumFacing.UP.equals(facing)){
//                return itemHandlerCapability.cast(this.up);
//            }
//            if (EnumFacing.DOWN.equals(facing)){
//                return itemHandlerCapability.cast(this.down);
//            }
//            return itemHandlerCapability.cast(this.side);
//        }
//        return super.getCapability(capability, facing);
//    }
//
//    @Override
//    public void update() {
////        soulRefinerWorking();
//        soulRefinerDoing();
//    }
//
//    private void soulRefinerWorking(){
//        if (this.side.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE)){
//            if (this.soulPower>0){
//                this.soulPower -= 1;
//                this.compressorProgress += 1;
//                if (this.compressorProgress >= 100) {
//                    this.compressorProgress = 0;
//                    if (this.soulPowerType == 6) {
//                        ItemStack stackA = new ItemStack(ModItems.AS_SOUL_STONE_A);
//                        if (this.down.insertItem(0, stackA, true).isEmpty()) {
//                            this.down.insertItem(0, stackA, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                    else if (this.soulPowerType == 10){
//                        ItemStack stackB = new ItemStack(ModItems.AS_SOUL_STONE_B);
//                        if (this.down.insertItem(0, stackB, true).isEmpty()) {
//                            this.down.insertItem(0, stackB, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                    else if (this.soulPowerType == 14){
//                        ItemStack stackC = new ItemStack(ModItems.AS_SOUL_STONE_C);
//                        if (this.down.insertItem(0, stackC, true).isEmpty()) {
//                            this.down.insertItem(0, stackC, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                    else if (this.soulPowerType == 18){
//                        ItemStack stackD = new ItemStack(ModItems.AS_SOUL_STONE_D);
//                        if (this.down.insertItem(0, stackD, true).isEmpty()) {
//                            this.down.insertItem(0, stackD, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                    else if (this.soulPowerType == 22){
//                        ItemStack stackE = new ItemStack(ModItems.AS_SOUL_STONE_E);
//                        if (this.down.insertItem(0, stackE, true).isEmpty()) {
//                            this.down.insertItem(0, stackE, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                }
//                else {
//                    this.markDirty();
//                }
//            }
//            else {
//                if (compressorProgress > 0){
//                    compressorProgress--;
//                    this.markDirty();
//                }
//                Item item = this.up.extractItem(0, 1, true).getItem();
//                if (item.equals(ModItems.AS_FUEL_A)) {
//                    if (this.soulPowerType != 6){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 6;
//                        this.markDirty();
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                } else if (item.equals(ModItems.AS_FUEL_B)) {
//                    if (this.soulPowerType != 10){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 10;
//                        this.markDirty();
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                } else if (item.equals(ModItems.AS_FUEL_C)) {
//                    if (this.soulPowerType != 14){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 14;
//                        this.markDirty();
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                } else if (item.equals(ModItems.AS_FUEL_D)) {
//                    if (this.soulPowerType != 18){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 18;
//                        this.markDirty();
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                } else if (item.equals(ModItems.AS_FUEL_E)) {
//                    if (this.soulPowerType != 22){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 22;
//                        this.markDirty();
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                }
//            }
//        }
//        else {
//            compressorProgress = 0;
//            if (soulPower > 0) {
//                soulPower--;
//            }
//            this.markDirty();
//        }
//    }
//
//    private void soulRefinerDoing(){
//        if (this.side.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE) &&
//                this.down.extractItem(0, 64, true).getCount() < 64){
//            if (this.soulPower>0){
//                this.soulPower -= 1;
//                if (this.soulPowerType == 6 &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_A) ||
//                                this.down.extractItem(0, 1, true).isEmpty())){
//                    this.compressorProgress += 1;
//                    if (this.compressorProgress >= 100){
//                        this.compressorProgress = 0;
//                        ItemStack stackA = new ItemStack(ModItems.AS_SOUL_STONE_A);
//                        if (this.down.insertItem(0, stackA, true).isEmpty()) {
//                            this.down.insertItem(0, stackA, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                }
//                else if (this.soulPowerType == 10 &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_B) ||
//                                this.down.extractItem(0, 1, true).isEmpty())){
//                    this.compressorProgress += 1;
//                    if (this.compressorProgress >= 100){
//                        this.compressorProgress = 0;
//                        ItemStack stackB = new ItemStack(ModItems.AS_SOUL_STONE_B);
//                        if (this.down.insertItem(0, stackB, true).isEmpty()) {
//                            this.down.insertItem(0, stackB, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                }
//                else if (this.soulPowerType == 14 &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_C) ||
//                                this.down.extractItem(0, 1, true).isEmpty())){
//                    this.compressorProgress += 1;
//                    if (this.compressorProgress >= 100){
//                        this.compressorProgress = 0;
//                        ItemStack stackC = new ItemStack(ModItems.AS_SOUL_STONE_C);
//                        if (this.down.insertItem(0, stackC, true).isEmpty()) {
//                            this.down.insertItem(0, stackC, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                }
//                else if (this.soulPowerType == 18 &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_D) ||
//                                this.down.extractItem(0, 1, true).isEmpty())){
//                    this.compressorProgress += 1;
//                    if (this.compressorProgress >= 100){
//                        this.compressorProgress = 0;
//                        ItemStack stackD = new ItemStack(ModItems.AS_SOUL_STONE_D);
//                        if (this.down.insertItem(0, stackD, true).isEmpty()) {
//                            this.down.insertItem(0, stackD, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                }
//                else if (this.soulPowerType == 22 &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_E) ||
//                                this.down.extractItem(0, 1, true).isEmpty())){
//                    this.compressorProgress += 1;
//                    if (this.compressorProgress >= 100){
//                        this.compressorProgress = 0;
//                        ItemStack stackE = new ItemStack(ModItems.AS_SOUL_STONE_E);
//                        if (this.down.insertItem(0, stackE, true).isEmpty()) {
//                            this.down.insertItem(0, stackE, false);
//                            this.side.extractItem(0, 1, false);
//                        }
//                    }
//                }
//                else {
//                    if (this.compressorProgress > 0){
//                        compressorProgress--;
//                    }
//                }
//            }
//            else {
//                Item item = this.up.extractItem(0, 1, true).getItem();
//                if (item.equals(ModItems.AS_FUEL_A) &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_A) ||
//                                this.down.extractItem(0, 1, true).isEmpty())) {
//                    if (this.soulPowerType != 6){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 6;
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                } else if (item.equals(ModItems.AS_FUEL_B) &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_B) ||
//                                this.down.extractItem(0, 1, true).isEmpty())) {
//                    if (this.soulPowerType != 10){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 10;
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                } else if (item.equals(ModItems.AS_FUEL_C) &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_C) ||
//                                this.down.extractItem(0, 1, true).isEmpty())) {
//                    if (this.soulPowerType != 14){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 14;
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                } else if (item.equals(ModItems.AS_FUEL_D) &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_D) ||
//                                this.down.extractItem(0, 1, true).isEmpty())) {
//                    if (this.soulPowerType != 18){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 18;
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                } else if (item.equals(ModItems.AS_FUEL_E) &&
//                        (this.down.extractItem(0, 1, true).getItem().equals(ModItems.AS_SOUL_STONE_E) ||
//                                this.down.extractItem(0, 1, true).isEmpty())) {
//                    if (this.soulPowerType != 22){
//                        this.compressorProgress = 0;
//                        this.soulPowerType = 22;
//                    }
//                    this.up.extractItem(0, 1, false);
//                    this.soulPower = 200;
//                }
//                else
//                {
//                    if (compressorProgress > 0){
//                        compressorProgress--;
//                    }
//                }
//            }
//        }
//        else {
//            compressorProgress = 0;
//            if (soulPower > 0) {
//                soulPower--;
//            }
//        }
//    }
//
//}
